// 数据统计模块API接口
// 提供学习数据统计、进度分析、趋势图表等数据服务

import { get, post, put, del } from './request';

// 统计API接口
const statisticsApi = {
  // ============== 学习统计相关接口 ==============
  
  /**
   * 获取用户学习概览统计
   * @param {Object} params - 查询参数
   * @param {string} params.startDate - 开始日期 (YYYY-MM-DD)
   * @param {string} params.endDate - 结束日期 (YYYY-MM-DD)
   * @returns {Promise} 学习概览数据
   */
  getLearningOverview(params = {}) {
    return get('/statistics/learning/overview', params);
  },
  
  /**
   * 获取学习时长统计
   * @param {Object} params - 查询参数
   * @param {string} params.period - 统计周期 (day, week, month, year)
   * @param {number} params.limit - 返回数据条数
   * @returns {Promise} 学习时长统计数据
   */
  getLearningDuration(params = {}) {
    return get('/statistics/learning/duration', params);
  },
  
  /**
   * 获取单词掌握进度统计
   * @param {Object} params - 查询参数
   * @param {string} params.wordBookId - 单词本ID
   * @param {string} params.unitId - 单元ID
   * @returns {Promise} 单词掌握进度数据
   */
  getWordMasteryProgress(params = {}) {
    return get('/statistics/word/mastery', params);
  },
  
  /**
   * 获取学习效率统计
   * @param {Object} params - 查询参数
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @returns {Promise} 学习效率数据
   */
  getLearningEfficiency(params = {}) {
    return get('/statistics/learning/efficiency', params);
  },
  
  /**
   * 获取学习趋势数据
   * @param {Object} params - 查询参数
   * @param {string} params.type - 统计类型 (words, duration, frequency)
   * @param {string} params.period - 统计周期 (week, month, year)
   * @returns {Promise} 学习趋势数据
   */
  getLearningTrend(params = {}) {
    return get('/statistics/learning/trend', params);
  },
  
  // ============== 任务统计相关接口 ==============
  
  /**
   * 获取任务完成统计
   * @param {Object} params - 查询参数
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @returns {Promise} 任务完成统计数据
   */
  getTaskCompletionStats(params = {}) {
    return get('/statistics/task/completion', params);
  },
  
  /**
   * 获取任务分类统计
   * @returns {Promise} 任务分类统计数据
   */
  getTaskCategoryStats() {
    return get('/statistics/task/category');
  },
  
  /**
   * 获取任务完成趋势
   * @param {Object} params - 查询参数
   * @param {string} params.period - 统计周期
   * @returns {Promise} 任务完成趋势数据
   */
  getTaskCompletionTrend(params = {}) {
    return get('/statistics/task/trend', params);
  },
  
  // ============== 单词统计相关接口 ==============
  
  /**
   * 获取单词学习统计
   * @param {Object} params - 查询参数
   * @param {string} params.wordBookId - 单词本ID
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @returns {Promise} 单词学习统计数据
   */
  getWordLearningStats(params = {}) {
    return get('/statistics/word/learning', params);
  },
  
  /**
   * 获取单词测试统计
   * @param {Object} params - 查询参数
   * @param {string} params.wordBookId - 单词本ID
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @returns {Promise} 单词测试统计数据
   */
  getWordTestStats(params = {}) {
    return get('/statistics/word/test', params);
  },
  
  /**
   * 获取薄弱单词统计
   * @param {Object} params - 查询参数
   * @param {number} params.limit - 返回数量限制
   * @returns {Promise} 薄弱单词数据
   */
  getWeakWords(params = {}) {
    return get('/statistics/word/weak', params);
  },
  
  /**
   * 获取单词记忆曲线数据
   * @param {string} wordId - 单词ID
   * @returns {Promise} 单词记忆曲线数据
   */
  getWordMemoryCurve(wordId) {
    return get(`/statistics/word/memory-curve/${wordId}`);
  },
  
  // ============== 综合数据仪表盘 ==============
  
  /**
   * 获取用户仪表盘数据
   * @param {Object} params - 查询参数
   * @param {string} params.period - 统计周期
   * @returns {Promise} 仪表盘综合数据
   */
  getDashboardData(params = {}) {
    return get('/statistics/dashboard', params);
  },
  
  // ============== 自定义统计报表 ==============
  
  /**
   * 创建自定义统计报表
   * @param {Object} data - 报表配置数据
   * @param {string} data.name - 报表名称
   * @param {string} data.type - 报表类型
   * @param {Object} data.filters - 过滤条件
   * @param {Object} data.config - 报表配置
   * @returns {Promise} 创建结果
   */
  createCustomReport(data) {
    return post('/statistics/reports', data);
  },
  
  /**
   * 获取自定义报表列表
   * @returns {Promise} 报表列表数据
   */
  getCustomReports() {
    return get('/statistics/reports');
  },
  
  /**
   * 获取自定义报表数据
   * @param {string} reportId - 报表ID
   * @returns {Promise} 报表数据
   */
  getCustomReportData(reportId) {
    return get(`/statistics/reports/${reportId}/data`);
  },
  
  /**
   * 更新自定义报表
   * @param {string} reportId - 报表ID
   * @param {Object} data - 更新数据
   * @returns {Promise} 更新结果
   */
  updateCustomReport(reportId, data) {
    return put(`/statistics/reports/${reportId}`, data);
  },
  
  /**
   * 删除自定义报表
   * @param {string} reportId - 报表ID
   * @returns {Promise} 删除结果
   */
  deleteCustomReport(reportId) {
    return del(`/statistics/reports/${reportId}`);
  },
  
  // ============== 学习分析建议 ==============
  
  /**
   * 获取学习分析和建议
   * @returns {Promise} 学习分析和建议数据
   */
  getLearningAnalysis() {
    return get('/statistics/analysis/suggestions');
  },
  
  /**
   * 获取学习效率分析
   * @param {Object} params - 查询参数
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @returns {Promise} 学习效率分析数据
   */
  getEfficiencyAnalysis(params = {}) {
    return get('/statistics/analysis/efficiency', params);
  },
  
  // ============== 导出统计数据 ==============
  
  /**
   * 导出学习统计数据
   * @param {Object} params - 导出参数
   * @param {string} params.format - 导出格式 (excel, csv)
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @param {Array} params.dataTypes - 数据类型
   * @returns {Promise} 导出文件URL或二进制数据
   */
  exportStatistics(params = {}) {
    return get('/statistics/export', params, {
      responseType: 'blob'
    });
  },
  
  // ============== 学习计划进度 ==============
  
  /**
   * 获取学习计划进度统计
   * @param {string} planId - 学习计划ID
   * @returns {Promise} 学习计划进度数据
   */
  getLearningPlanProgress(planId) {
    return get(`/statistics/plan/progress/${planId}`);
  },
  
  // ============== 学习时段分布 ==============
  
  /**
   * 获取学习时段分布统计
   * @param {Object} params - 查询参数
   * @param {string} params.period - 统计周期
   * @returns {Promise} 学习时段分布数据
   */
  getLearningTimeDistribution(params = {}) {
    return get('/statistics/learning/time-distribution', params);
  },
  
  // ============== 单词学习方法效果对比 ==============
  
  /**
   * 获取不同学习方法的效果对比
   * @param {Object} params - 查询参数
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @returns {Promise} 学习方法效果对比数据
   */
  getLearningMethodComparison(params = {}) {
    return get('/statistics/learning/method-comparison', params);
  },
  
  // ============== 学习目标达成情况 ==============
  
  /**
   * 获取学习目标达成情况
   * @param {Object} params - 查询参数
   * @param {string} params.targetType - 目标类型
   * @param {string} params.period - 统计周期
   * @returns {Promise} 目标达成情况数据
   */
  getGoalAchievement(params = {}) {
    return get('/statistics/goals/achievement', params);
  }
};

// 模拟数据，用于开发环境
const mockStatisticsData = {
  // 学习概览数据
  learningOverview: {
    totalWordsLearned: 528,
    totalLearningDays: 42,
    totalLearningHours: 128.5,
    averageWordsPerDay: 12.6,
    currentStreak: 15,
    bestStreak: 21,
    completionRate: 0.87
  },
  
  // 学习时长统计（最近7天）
  learningDuration: [
    { date: '2024-01-01', duration: 45, wordsLearned: 65 },
    { date: '2024-01-02', duration: 30, wordsLearned: 42 },
    { date: '2024-01-03', duration: 60, wordsLearned: 88 },
    { date: '2024-01-04', duration: 40, wordsLearned: 58 },
    { date: '2024-01-05', duration: 55, wordsLearned: 76 },
    { date: '2024-01-06', duration: 35, wordsLearned: 48 },
    { date: '2024-01-07', duration: 50, wordsLearned: 72 }
  ],
  
  // 单词掌握进度
  wordMasteryProgress: {
    totalWords: 1200,
    masteredWords: 426,
    learningWords: 312,
    notStartedWords: 462,
    masteryRate: 0.355,
    progressPercentage: 61.5
  },
  
  // 任务统计数据
  taskStats: {
    totalTasks: 86,
    completedTasks: 72,
    pendingTasks: 14,
    completionRate: 0.837,
    tasksByCategory: [
      { category: '每日学习', count: 45, completed: 41 },
      { category: '单词复习', count: 28, completed: 25 },
      { category: '测试练习', count: 13, completed: 6 }
    ]
  },
  
  // 薄弱单词示例
  weakWords: [
    { word: 'accommodate', correctRate: 0.3, timesPracticed: 12 },
    { word: 'conscientious', correctRate: 0.4, timesPracticed: 10 },
    { word: 'necessary', correctRate: 0.45, timesPracticed: 8 },
    { word: 'separate', correctRate: 0.5, timesPracticed: 11 },
    { word: 'occurrence', correctRate: 0.55, timesPracticed: 9 }
  ],
  
  // 学习趋势数据
  learningTrend: {
    labels: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
    datasets: [
      {
        label: '学习单词数',
        data: [65, 42, 88, 58, 76, 48, 72],
        color: '#4CAF50'
      },
      {
        label: '学习时长(分钟)',
        data: [45, 30, 60, 40, 55, 35, 50],
        color: '#2196F3'
      }
    ]
  },
  
  // 仪表盘数据
  dashboard: {
    todayStats: {
      wordsLearned: 48,
      learningTime: 35,
      tasksCompleted: 3
    },
    weeklyTrend: {
      labels: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
      wordsData: [65, 42, 88, 58, 76, 48, 48],
      timeData: [45, 30, 60, 40, 55, 35, 35]
    },
    masteryDistribution: [
      { level: '精通', count: 189, percentage: 35.8 },
      { level: '熟练', count: 145, percentage: 27.5 },
      { level: '一般', count: 112, percentage: 21.2 },
      { level: '薄弱', count: 82, percentage: 15.5 }
    ],
    recentActivities: [
      { type: '学习单词', content: '完成今天的学习任务', time: '今天 09:30' },
      { type: '完成测试', content: '单词测试正确率 85%', time: '昨天 18:45' },
      { type: '获得成就', content: '连续学习15天', time: '昨天 09:15' },
      { type: '等级提升', content: '升级到 Lv.8', time: '2天前' }
    ]
  },
  
  // 学习时段分布
  timeDistribution: [
    { hour: '06:00-08:00', count: 12, percentage: 8 },
    { hour: '08:00-10:00', count: 35, percentage: 23.3 },
    { hour: '10:00-12:00', count: 18, percentage: 12 },
    { hour: '12:00-14:00', count: 5, percentage: 3.3 },
    { hour: '14:00-16:00', count: 15, percentage: 10 },
    { hour: '16:00-18:00', count: 22, percentage: 14.7 },
    { hour: '18:00-20:00', count: 30, percentage: 20 },
    { hour: '20:00-22:00', count: 8, percentage: 5.3 },
    { hour: '22:00-24:00', count: 2, percentage: 1.3 }
  ],
  
  // 学习建议
  learningSuggestions: [
    {
      type: 'timeManagement',
      title: '优化学习时间',
      content: '建议在早上8-10点和晚上6-8点学习，这两个时段你的学习效率最高',
      priority: 'high'
    },
    {
      type: 'wordMastery',
      title: '加强薄弱单词练习',
      content: '检测到你在拼写复杂单词时有困难，建议增加拼写练习',
      priority: 'high'
    },
    {
      type: 'learningStreak',
      title: '保持学习连续性',
      content: '你已经连续学习15天，继续保持可以获得额外奖励',
      priority: 'medium'
    },
    {
      type: 'taskCompletion',
      title: '完成剩余任务',
      content: '你还有14个待完成任务，建议优先完成测试练习类任务',
      priority: 'medium'
    }
  ]
};

// 导出API和模拟数据
export { statisticsApi, mockStatisticsData };
export default statisticsApi;